GitHub版のStable diffusionを動かす
前提環境
wslにcudaが入ってる
GTX1070で動作確認をした
CUDA関係は設定済みとする
手順
code:zsh
sudo apt-get install libgl1-mesa-glx libegl1-mesa libxrandr2 libxrandr2 libxss1 libxcursor1 libxcomposite1 libasound2 libxi6 libxtst6
# ダウンロード
# ハッシュ確認
shasum -a 256 Anaconda3-2022.05-Linux-x86_64.sh
a7c0afe862f6ea19a596801fc138bde0463abcbce1b753e8d5c474b506a2db2d Anaconda3-2022.05-Linux-x86_64.sh
# python3.8だけど
bash Anaconda3-2022.05-Linux-x86_64.sh
# 指示に従う
# 使っているのshellを指定する必要がある
# ここ間違えた。zshをつかっているのにbashを初期化してしまった
source ~/.bashrc # これはちゃんとやっていれば不要
# ひょうじがぶっこわれた!
# 一旦bashに離脱したらもどった
conda list
# 色々表示されてるので入ってる
code:zsh
git clone
conda env create -f environment.yaml
conda activate ldm
# 失敗
conda init zsh
exec zsh -l
# 仕切り直し
conda activate ldm
stable-diffusion-v1-4-original weightsを手に入れる
方法が2つある。基素.iconは1でやったが2の方が楽だろう
1. ブラウザダウンロード
Windowsでブラウザダウンロードして
エクスプローラに\\wsl$を入力してD&D
2. git lfsを使う
code:zsh
$ cd stable-diffusion-v-1-4-original
$ cd git lfs pull
リンクする
code:zsh
mkdir -p models/ldm/stable-diffusion-v1/
ln -s <path/to/sd-v1-4.ckpt> models/ldm/stable-diffusion-v1/model.ckpt
画像を生成する
code:zsh
python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms
FileNotFoundError: Errno 2 No such file or directory: 'models/ldm/stable-diffusion-v1/model.ckpt' models/ldm/stable-diffusion-v1/model.ckptあるが??
ファイルの実態を入れてmodel.ckptにしたら動いた
symlinkがだめだった?
out of memoryになる
対応はいくつかある
1. duffuser版のようにfloat16になるようにする(VRAM 8GBのGTX1070の場合)
やり方がわからなかったのだが、Twitterでやり方を教えていただいた
それだけではout of memoryになった
標準のバッチサイズ3ではVRAMに乗らないため、実行時オプションで --n_samples 1 もしくは 2 を指定する
つまり最終形はこう
code:zsh
python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms --n_sampls 2
2022/10/03 追記 RTX3090にしたら32bitでn_samples 7までいけた
8でout of memory
code:zsh
RuntimeError: CUDA out of memory. Tried to allocate 8.00 GiB (GPU 0; 24.00 GiB total capacity; 8.37 GiB already allocated; 3.28 GiB free; 16.58 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
2. (非推奨)生成される画像サイズを下げる
256x256にしたら生成はできた。ギリギリ。
デフォルトの512px以下にすると品質劣化するので使わない
https://gyazo.com/f7845508e2efdf2eab7ef616309cebc6
3. 速度を犠牲に少メモリにしたモデルを使う
補足
torchのdockerコンテナを引っ張ってくるとNVIDIAまわりの設定が飛ばせるらしい
diffusers版をDockerで動かしている
--unsafeコマンドを使うとNSFWチェックをしないことでVRAMを数G追加できるらしい(txt2imgのみ)